package com.lc.midi.mid;

import java.util.ArrayList;
import java.util.List;

public class ByteConvert {
	private ByteConvert() {}
	
	public static int btoInt(byte[] b) {
		byte[] a = new byte[4];
		int i = a.length - 1,j = b.length - 1;
		for (; i >= 0 ; i--,j--) {//从b的尾部(即int值的低位)开始copy数据
			if(j >= 0)
				a[i] = b[j];
			else
				a[i] = 0;//如果b.length不足4,则将高位补0
		}
		int v0 = (a[0] & 0xff) << 24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位
		int v1 = (a[1] & 0xff) << 16;
		int v2 = (a[2] & 0xff) << 8;
		int v3 = (a[3] & 0xff) ;
		return v0 + v1 + v2 + v3;
	}
	
	public static byte[] intTob(int n) {
		byte[] bytes=new byte[4];
	    bytes[0]=(byte) (n>>24);
	    bytes[1]=(byte) (n>>16);
	    bytes[2]=(byte) (n>>8);
	    bytes[3]=(byte) n;
	    return bytes;
	}
	
	public static short btoShort(byte[] b) {
		byte[] a = new byte[2];
		int i = a.length - 1,j = b.length - 1;
		for (; i >= 0 ; i--,j--) {//从b的尾部(即int值的低位)开始copy数据
			if(j >= 0)
				a[i] = b[j];
			else
				a[i] = 0;//如果b.length不足4,则将高位补0
		}
		short v0 = (short) ((a[0] & 0xff) << 8);//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位
		short v1 = (short) (a[1] & 0xff);
		return (short) (v0 + v1);
	}
	
	public static byte[] shortTob(short n) {
		byte[] bytes=new byte[2];
	    bytes[0]=(byte) (n>>8);
	    bytes[1]=(byte) (n);
	    return bytes;
	}
	
	public static String btoStr(byte[] b) {
		return new String(b);
	}
	
	public static List<Byte> strTob(String s) {
		List<Byte> bytes = new ArrayList<Byte>();
		for (int i = 0; i < s.length(); i++) {
			bytes.add((byte) (s.charAt(i) & 0xff));
		}
		return bytes;
	}
}
